/*
 * @Description: 描述信息
 * @Version: 版本号
 * @Author: xuebao
 * @Date: 2023-12-06 16:15:12
 * @LastEditors: renmengxue
 * @LastEditTime: 2023-12-07 20:06:04
 */
import { ColumnProps, ImageProps, UserProps } from './store'
// export function generateFitUrl(data: ImageProps, width: number, height: number, format = ['m_pad']) {
//     if (data && data.url) {
//       const formatStr = format.reduce((prev, current) => {
//         return current + ',' + prev
//       }, '')
//       data.fitUrl = data.url + `?x-oss-process=image/resize,${formatStr}h_${height},w_${width}`
//     }
//   }

interface CheckCondition{
  format?:string[],
  size?:number
}
type ErrorType = 'format' | 'size' |null
export function beforeUploadCheck(file:File, condition:CheckCondition) {
  const { format, size } = condition
  const isValidFormat = format ? format.includes(file.type) : true
  const isValidSize = size ? (file.size / 1024 / 1024) < size : true
  let error:ErrorType = null
  if (!isValidFormat) {
    error = 'format'
  }
  if (!isValidSize) {
     error = 'size'
  }
  return {
    passed: isValidFormat && isValidSize,
    error
  }
}

// export function addColumnAvatar(data: ColumnProps, width: number, height: number) {
//   if (data.avatar) {
//     generateFitUrl(data.avatar, width, height)
//   } else {
//     const parseCol = data as ColumnProps
//     data.avatar = {
//       fitUrl: require(parseCol.title ? '@/assets/column.jpg' : '@/assets/avatar.jpg')
//     }
//   }
// }

interface TestProps{
  _id:string,
  name:string
}
const testData:TestProps[] = [{ _id: '1', name: 'a' }, { _id: '2', name: '' }]
// <T extends {_id?:string}> 约束这个泛型，至少拥有_id这个值
// export const arrToObj = <T extends {_id?:string}>(arr:Array<T>) => {
//   return arr.reduce((pre, current) => {
//     if (current._id) {
//         pre[current._id] = current
//     }
//     return pre
//     // pre是之前的结果
//     // current是当前值
//   }, {} as {[key:string]:T})
//   // reduce的第二个参数搞成一个空的对象
// }

export const arrToObj = <T extends { _id?: string }>(arr: Array<T>) => {
  return arr.reduce((prev, current) => {
    if (current._id) {
      prev[current._id] = current
    }
    return prev
  }, {} as { [key: string]: T })
}

// array.reduce((prev, cur, index, arr) => {
//   /***/
// }, initialValue)

// reduce 四个参数
// pre  上一次调用回调返回的值，或者是提供的初始值
// cur 必需（数组中当前被处理的元素）
// index 可选 （当前元素在数组中的索引）
// arr 可选 （调用 reduce 的数组）
// initialValue 可选，表示初始值，作为第一次调用callback的第一个参数

const testData2 :{[key:string]:TestProps} = {
  1: { _id: '1', name: 'a' },
  2: { _id: '2', name: 'b' }
}

// 需要把转换成对象的{1:[{_id:"1",name:'a}]} 再转回去

export const objToArr = <T>(obj:{[key:string]:T}) => {
  return Object.keys(obj).map(key => obj[key])
  // 其中Object.keys 取出来的是 [1,2]
  // [1,2] map 的key是 他们自己，1，2 然后再obj[1] 和obj[2]组合成数组
}

// const result2 = objToArr(testData2)
